﻿using BUGCOME.Infrastructure.Attribute;
using BUGCOME.Model.Auth;
using BUGCOME.Service.Auth.IServices;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BUGCOME.Service.Auth
{
    /// <summary>
    /// 用户个人信息服务的具体实现类
    /// </summary>
    /// <remarks>
    /// 负责处理用户个人数据相关的业务逻辑。
    /// 通过依赖注入以 Transient 生命周期进行管理。
    /// 继承自 BaseService，具备通用的 CRUD 功能。
    /// 实现 IUserIndividualService 接口定义的业务方法。
    /// </remarks>
    [AppService(ServiceType = typeof(IUserIndividualService), ServiceLifetime = LifeTime.Transient)]
    public class UserIndividualService : BaseService<UserIndividual>, IUserIndividualService
    {
        /// <summary>
        /// 异步添加用户个人信息
        /// </summary>
        /// <param name="userIndividual">待添加的用户个人信息实体</param>
        /// <returns>返回添加成功的 <see cref="UserIndividual"/> 实体对象</returns>
        /// <exception cref="Exception">当该用户个人信息已存在时抛出异常</exception>
        /// <remarks>
        /// 用于注册或补充用户个人资料，需保证 UserId 唯一性。
        /// </remarks>
        public async Task<UserIndividual> AddUserIndividualAsync(UserIndividual userIndividual)
        {
            // 检查该用户个人信息是否已存在
            bool isExist = await Queryable().AnyAsync(u => u.UserId == userIndividual.UserId);
            if (isExist)
            {
                // 已存在则抛出异常，避免重复注册
                throw new Exception("该用户个人信息已存在，请重新注册！");
            }
            // 插入用户个人信息并返回实体
            return await Insertable(userIndividual).ExecuteReturnEntityAsync();
        }
    }
}
